package cqrtplm.common;

import com.hustcad.plm.pdm.partbom.vo.PartBomTreeByFilterVO;
import com.hustcad.plm.pdm.partbom.vo.usagecount.PartUsageCountVO;
import com.hustcad.plm.pdm.workflow.model.entity.WorkFlowContainerView;
import com.ty.basic.entity.IdentifierEntity;
import cqrtplm.dto.RTExportFileDTO;

import java.io.IOException;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

public interface CommonService {
    /**、
     *根据编号判断图纸对象是否存在
     * @param number
     * @return
     */
    boolean cadDocIsExistByNumber(String number);

    /**
     * 获取流程中对象
     *
     * @param workFlowContainerView
     * @return
     */
    List<IdentifierEntity> getFlowObjListByWorkFlowContainer(WorkFlowContainerView workFlowContainerView);

    /**
     * 获取流程中对象
     *
     * @param workFlowContainerId
     * @return
     */
    List<IdentifierEntity> getFlowObjListByWorkFlowContainer(BigInteger workFlowContainerId);

    /**
     * 根据物料详细信息查询物料的子件
     * @param partNumber                    物料编码 父编码，isApplyRoot=true时必填
     * @param partOid                       物料oid
     * @param view                          视图
     * @param isNestedTree                  true返回嵌套树，  false返回平铺list
     * @param lifecycleStateKey             生命周期内部名称   传null不指定生命周期状态（子件的生命周期状态）
     * @param expandLevel                   查询层级  1 为查询一级子件   N为查询所有层级
     * @return
     */
    PartBomTreeByFilterVO queryChildParts(String partNumber, String partOid, String view, boolean isNestedTree, String lifecycleStateKey, String expandLevel);

    /**
     * 根据物料详细信息查询物料的子件
     * @param partNumber                    物料编码 父编码，isApplyRoot=true时必填
     * @param partOid                       物料oid
     * @param view                          视图
     * @param isNestedTree                  true返回嵌套树，  false返回平铺list
     * @param lifecycleStateKey             生命周期内部名称   传null不指定生命周期状态（子件的生命周期状态）
     * @param expandLevel                   查询层级  1 为查询一级子件   N为查询所有层级
     * @param isParent                      是否差父项
     * @return
     */
    PartBomTreeByFilterVO queryChildParts(String partNumber, String partOid, String view, boolean isNestedTree, String lifecycleStateKey, String expandLevel,boolean isParent);

    RTExportFileDTO getDestFile(String destFileName);

    String getFilePath(String basicModelPath);

    PartBomTreeByFilterVO   queryChildPartsNoIba(String partNumber, String partOid, String view, boolean isNestedTree, String lifecycleStateKey, String expandLevel,boolean isParent);

    String sendPostRequest(String urlString, String username, String password,String body);

    String downloadFileToFtp(BigInteger fileId, String baseFilePath);

    /**
     * 查询物料使用情况
     * @param partListOid
     * @param logic
     * @param level
     * @return
     */
    Map<BigInteger, List<PartUsageCountVO>> queryPartUsageParent(List<BigInteger> partListOid, String logic, String level);

    Map<String, String> getIbaIdAndNameByType(String typeName);

    String sendGetRequestToIPD(String url) throws IOException;

    String sendPostRequestToIPD(String url, String data) throws IOException;

    String sendPutRequestToIPD(String url, String data) throws IOException;
}
